<?php
/**
 * Page index du module par défaut
 * Présente le site
 *
 * @category actions
 * @package default
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class indexAction extends shAction {

    /**
     * Fonction d'initialisation des actions
     */
    public function init() {
	$this->addJavascript('javascript/planning.js');
    }

    /**
     * Execute la méthode par défaut pour l'action index (affichage d'un formulaire et du planning)
     * @param <integer> Idenfiant de promotion à afficher
     * @param <string> Mode d'affichage du planning parmi Planing::JOUR | Planning::SEMAIN | Planning::MOIS
     * @param <string> Date de départ au format URL
     * @param <integer> Groupe à afficher au premier plan
     */
    public function execute($promotion=null, $mode=Planning::SEMAINE, $date=null, $groupe=null) {
	$this->setTitle('Consultation');

	// Gestion de l'affichage du planning en lui passant les paramètres demandés
	$planning = new Planning; 
	$planning->addPromotion($promotion)
		 ->setMode($mode)
		 ->setDate(isset($date) ? Date::fromURL($date) : Date::today());

        // Récupère les promotions en cours pour la date sélectionnée
        $promotions = shSGBD::select(
                'SELECT promotion.id AS id_promotion, specialite.intitule AS specialite, filiere.intitule AS filiere '.
                'FROM promotion '.
                'INNER JOIN specialite ON promotion.id_specialite=specialite.id '.
                'INNER JOIN filiere ON specialite.id_filiere=filiere.id '.
                'WHERE promotion.visible=:visible '.
                'AND promotion.date_debut<=:date '.
                'AND promotion.date_fin>=:date '.
                'ORDER BY filiere.intitule, specialite.intitule ',
                array(':visible' => 1,
                ':date' => $planning->getDate()->toSGBD() )
        );

	// Si pas de promotion en paramètre, on prend la première qu'on trouve
	if ( (!$planning->isPromotion(0)) AND !empty($promotions) )
	    $planning->addPromotion($promotions[0]->id_promotion);

	// Formulaire de sélection date/promotion
        $formulaire = new shFormulaire;
        shField::date('Date')
                ->setValue($planning->getDate()->toFormulaire())
                ->appendTo($formulaire);

        $select = shField::select('Promotion')
		->setRequired(false)
                ->appendTo($formulaire);

	if ( sizeof($planning->getPromotions()) > 0 )
	    $select->setValue($planning->getPromotion(0));

	// Affectation des promotions à la selectbox
        foreach($promotions AS $promotion) {
            $select->addOption($promotion->id_promotion, $promotion->specialite . ' ' . $promotion->filiere);
        }

	// Lorsque le formulaire est soumis, on redirige vers la même page, avec des paramètres
        $formulaire->setSubmit(function($formulaire) use($planning) {
	    $args = array();
	    $args[] = ( $formulaire->getField('Promotion')->getValue() != '' ) ?  $formulaire->getField('Promotion')->getValue() : 0;
	    $args[] = $planning->getMode();
	    if ( Date::fromFormulaire($formulaire->getField('Date')->getValue())->toURL() != Date::today()->toURL() )
		$args[] = Date::fromFormulaire($formulaire->getField('Date')->getValue())->toURL();
	   
            shAction::redirect(shRequest::__instance()->getModule(), shRequest::__instance()->getAction(), null, $args);
        });
	
	// Assignation au template du formulaire et du planning à afficher
        $this->assign('formulaire', $formulaire);
	$this->assign('planning', $planning);
    }
}
?>